#include <boost/asio.hpp>
#include <iostream>

#include "ITCPServer.h"

class DemoServer : public ITCPServerNotify {
 public:
  DemoServer();
  virtual ~DemoServer(void);

  void InitIOS();
  void CreateTcpAnsyServer();

  virtual void OnAccept(std::string sessionID, const char *szClientIP,
                        unsigned short usPort);

  /// \brief
  /// 从客户端接收到数据回调(回调函数应复制数据后，立即返回，否则影响接收效率，MDF方式阻塞时间不得超过15s，否则断线)
  /// \param ullClientID 客户端ID
  /// \param pbData 数据指针(函数调用后即释放，勿超范围使用，勿在函数中删除)
  /// \param unDataSize 数据大小
  virtual void OnRecvClientData(std::string sessionID,
                                const unsigned char *pbData,
                                unsigned int unDataSize) {}

  /// \brief 从客户端接收数据异常回调
  /// \param ullClientID 客户端ID
  virtual void OnClientDataError(std::string sessionID) {}

  /// \brief 断开客户端网络连接回调
  /// \param ullClientID 客户端ID
  virtual void OnClientDisconnect(std::string sessionID) {}

  // 内部消息通知
  ///< 调试信息
  // const EN_EVENT_TYPE WN_REPORT_LEVEL_DEBUG = 0;
  /////< 普通信息
  // const EN_EVENT_TYPE WN_REPORT_LEVEL_INFO = 1;
  /////< 警告信息
  // const EN_EVENT_TYPE WN_REPORT_LEVEL_WARN = 2;
  /////< 错误信息
  // const EN_EVENT_TYPE WN_REPORT_LEVEL_ERROR = 3;
  virtual void OnTCPMsg(int type, std::string msg) {}

 private:
  ITCPServer *m_pServer;

  // ioservice实例
  boost::asio::io_service m_iosev;

  /// \brief IO工作状态
  boost::shared_ptr<boost::asio::io_service::work> m_apWork;
};
